#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include "parcours.h"


int nb_personnes = 0;
Personne logs[NB_PERSONNES_MAX];


Capteur map_capteur(char* capteur){
	if(strcmp(capteur, "E01")==0) return E01;
	if(strcmp(capteur, "C01")==0) return C01;
	if(strcmp(capteur, "S01")==0) return S01;
	if(strcmp(capteur, "L01")==0) return L01;
	if(strcmp(capteur, "L02")==0) return L02;
	if(strcmp(capteur, "C02")==0) return C02;
	if(strcmp(capteur, "V01")==0) return V01;
	if(strcmp(capteur, "I01")==0) return I01;
	if(strcmp(capteur, "D01")==0) return D01;
	if(strcmp(capteur, "B01")==0) return B01;
	if(strcmp(capteur, "M01")==0) return M01;
	if(strcmp(capteur, "Sout")==0) return Sout;
	if(strcmp(capteur, "Pout")==0) return Pout;
	if(strcmp(capteur, "Ebola")==0) return Ebola;
	return E01;
}

void init_heures_passage_par_capteur(int indice){
	int i;
	for(i=0; i<=Ebola; i++){
		logs[indice].heures_passage_par_capteur[i] = -1;
	}
}
	
void gerer_ligne_fichier_log(int heure, int minute, int seconde, int id, char* capteur){
	int temps = 3600*heure+ 60*minute+ seconde;
	Capteur c = map_capteur(capteur);
	int i=0;
	while((i<nb_personnes) && (logs[i].id!=id)){
		i++;
	}
	if(i==nb_personnes){
		init_heures_passage_par_capteur(i);
		nb_personnes++;
	}
	logs[i].id = id;
	logs[i].heures_passage_par_capteur[c] = temps;
	
}

void lire_fichier_log(char* chemin){
	int heure, minute, seconde, id;
	char capteur[5];
	FILE *f = fopen(chemin,"r");
	if (f==NULL){
		printf("Fichier introuvable\n");
	}
	else{
		while(fscanf(f,"%d:%d:%d %d %s", &heure , &minute ,&seconde, &id, capteur)!=EOF ){
			gerer_ligne_fichier_log(heure, minute, seconde, id, capteur);
		}
	}
	fclose(f);
}


int detecter_parcours_non_respecte(int i){
	int j=0;
	for(j=Sout; j>0; j--){
		if((logs[i].heures_passage_par_capteur[j] != INIT_HEURE_PASSAGE) && (logs[i].heures_passage_par_capteur[j-1] == INIT_HEURE_PASSAGE)){
			 return 1;
		 }
	}
	return 0;
}
int detecter_delai_non_respecte(int i){
	if(logs[i].heures_passage_par_capteur[C02] == INIT_HEURE_PASSAGE) return 0;
	if(logs[i].heures_passage_par_capteur[L02] == INIT_HEURE_PASSAGE) return 0;
	int delai = logs[i].heures_passage_par_capteur[C02] - logs[i].heures_passage_par_capteur[L02];
	if (delai >=300) return 0;
	return 1;
}

int detecter_sortie_barriere(int i){
	return logs[i].heures_passage_par_capteur[Pout] != INIT_HEURE_PASSAGE;
}

int detecter_ebola(int i){
	return logs[i].heures_passage_par_capteur[Ebola] != INIT_HEURE_PASSAGE;
}

Etat detecter_probleme_personne(int i){
	if (detecter_parcours_non_respecte(i)) return PARCOURS_NON_RESPECTE;
	if (detecter_delai_non_respecte(i)) return DELAI_NON_RESPECTE;
	if (detecter_sortie_barriere(i)) return SORTIE_BARRIERE;
	if (detecter_ebola(i)) return EBOLA_DETECTE;
	return AUCUN_PROBLEME;
}

void detecter_probleme_global(){
	int i;
	for(i=0; i<nb_personnes;i++){
		if(detecter_probleme_personne(i) == AUCUN_PROBLEME) printf("Personne %d : AUCUN_PROBLEME\n", logs[i].id);
		if(detecter_probleme_personne(i) == PARCOURS_NON_RESPECTE) printf("Personne %d : PARCOURS_NON_RESPECTE\n", logs[i].id);
		if(detecter_probleme_personne(i) == DELAI_NON_RESPECTE) printf("Personne %d : DELAI_NON_RESPECTE\n", logs[i].id);
		if(detecter_probleme_personne(i) == SORTIE_BARRIERE) printf("Personne %d : SORTIE_BARRIERE\n", logs[i].id);
		if(detecter_probleme_personne(i) == EBOLA_DETECTE) printf("Personne %d : EBOLA_DETECTE\n", logs[i].id);
	}
}





void teste()
{
	lire_fichier_log("evenements.log");
	detecter_probleme_global();
}

 
